/**
 * 用户管理相关 API
 */

import { get, post, put, del } from '@/utils/request'

/**
 * 用户信息
 */
export interface User {
  userId: number
  username: string
  email: string
  displayName: string
  isLocked: boolean
  createdAt: string
  lastLoginAt?: string
  roles?: Role[]
}

/**
 * 角色信息
 */
export interface Role {
  roleId: number
  roleName: string
  description: string
  permissions?: Permission[]
}

/**
 * 权限信息
 */
export interface Permission {
  permissionId: number
  permissionName: string
  resource: string
  action: string
  description: string
}

/**
 * 创建用户请求
 */
export interface CreateUserRequest {
  username: string
  password: string
  email: string
  displayName: string
}

/**
 * 更新用户请求
 */
export interface UpdateUserRequest {
  email?: string
  displayName?: string
}

/**
 * 重置密码请求
 */
export interface ResetPasswordRequest {
  newPassword: string
}

/**
 * 创建角色请求
 */
export interface CreateRoleRequest {
  roleName: string
  description: string
  permissionIds: number[]
}

/**
 * 更新角色请求
 */
export interface UpdateRoleRequest {
  description?: string
  permissionIds?: number[]
}

// ============= 用户管理 API =============

/**
 * 获取所有用户
 */
export function getUsers(): Promise<User[]> {
  return get<User[]>('/api/User')
}

/**
 * 根据 ID 获取用户
 */
export function getUserById(userId: number): Promise<User> {
  return get<User>(`/api/User/${userId}`)
}

/**
 * 创建用户
 */
export function createUser(data: CreateUserRequest): Promise<User> {
  return post<User>('/api/User', data)
}

/**
 * 更新用户
 */
export function updateUser(userId: number, data: UpdateUserRequest): Promise<User> {
  return put<User>(`/api/User/${userId}`, data)
}

/**
 * 删除用户
 */
export function deleteUser(userId: number): Promise<void> {
  return del<void>(`/api/User/${userId}`)
}

/**
 * 锁定用户
 */
export function lockUser(userId: number): Promise<void> {
  return put<void>(`/api/User/${userId}/lock`)
}

/**
 * 解锁用户
 */
export function unlockUser(userId: number): Promise<void> {
  return put<void>(`/api/User/${userId}/unlock`)
}

/**
 * 重置用户密码
 */
export function resetUserPassword(userId: number, data: ResetPasswordRequest): Promise<void> {
  return put<void>(`/api/User/${userId}/reset-password`, data)
}

/**
 * 获取用户角色
 */
export function getUserRoles(userId: number): Promise<Role[]> {
  return get<Role[]>(`/api/User/${userId}/roles`)
}

/**
 * 分配角色给用户
 */
export function assignRolesToUser(userId: number, roleIds: number[]): Promise<void> {
  return post<void>(`/api/User/${userId}/roles`, { roleIds })
}

/**
 * 移除用户角色
 */
export function removeRolesFromUser(userId: number, roleIds: number[]): Promise<void> {
  return del<void>(`/api/User/${userId}/roles`, { data: { roleIds } })
}

// ============= 角色管理 API =============

/**
 * 获取所有角色
 */
export function getRoles(): Promise<Role[]> {
  return get<Role[]>('/api/Role')
}

/**
 * 根据 ID 获取角色
 */
export function getRoleById(roleId: number): Promise<Role> {
  return get<Role>(`/api/Role/${roleId}`)
}

/**
 * 创建角色
 */
export function createRole(data: CreateRoleRequest): Promise<Role> {
  return post<Role>('/api/Role', data)
}

/**
 * 更新角色
 */
export function updateRole(roleId: number, data: UpdateRoleRequest): Promise<Role> {
  return put<Role>(`/api/Role/${roleId}`, data)
}

/**
 * 删除角色
 */
export function deleteRole(roleId: number): Promise<void> {
  return del<void>(`/api/Role/${roleId}`)
}

/**
 * 获取角色的权限
 */
export function getRolePermissions(roleId: number): Promise<Permission[]> {
  return get<Permission[]>(`/api/Role/${roleId}/permissions`)
}

/**
 * 分配权限给角色
 */
export function assignPermissionsToRole(roleId: number, permissionIds: number[]): Promise<void> {
  return post<void>(`/api/Role/${roleId}/permissions`, { permissionIds })
}

// ============= 权限管理 API =============

/**
 * 获取所有权限
 */
export function getPermissions(): Promise<Permission[]> {
  return get<Permission[]>('/api/Permission')
}

/**
 * 根据 ID 获取权限
 */
export function getPermissionById(permissionId: number): Promise<Permission> {
  return get<Permission>(`/api/Permission/${permissionId}`)
}
